GithubActionsでaws-nukeを定期実行する
「GithubActionsでaws-nukeを定期実行したい。」
AWSリソースの一括削除に便利なaws-nukeですが、定期実行できたらさらに便利ですよね。
今回は、GithubActions上でaws-nukeを定期実行する方法を紹介します。
やってみた
フォルダ構成
. ├── .github │ └── workflows │ └── aws-nuke-run.yaml # aws-nukeをGithubActions上で実行する ├── docker-compose.yml └── nuke-config.yml #aws-nuke用のconfigファイル
IAMロールを作成
GithubActionsからAWSリソースを作成するために、IAMロールを作成します。
IAMロールの権限は、削除したいリソースによって変わります。
私はIAMユーザーなども削除したかったため、AdministratorAccess
のポリシーを付与しました。
IAMロールの作成は、以下が参考になるかと思います。
AWS CDKを使用している場合は、以下の手順でできます。
nuke-config.ymlの作成
aws-nuke用のconfigファイルを用意します。 今回はSQS Queueのみ削除するconfigファイルを用意しました。
--- regions: - ap-northeast-1 - global account-blocklist: - 000000000 resource-types: targets: - SQSQueue # SQSQueueのみ削除される accounts: 1234567890: {}
aws-nukeの設定などについては、こちらの記事で触れています。
docker-compose.ymlの作成
GithubActions上でdocker runでaws-nukeのコンテナ起動してもいいのですが、コマンドを短くするためにdocker-compose.yml
を使用します。
version: "3" services: aws-nuke: image: rebuy/aws-nuke:latest entrypoint: /usr/local/bin/aws-nuke --config /home/aws-nuke/config.yml --force --quiet volumes: - ./nuke-config.yml:/home/aws-nuke/config.yml - ~/.aws:/home/aws-nuke/.aws environment: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY - AWS_SESSION_TOKEN
以下のように、ローカル実行する際にも短いコマンドで実行できて便利です。
$ export AWS_ACCESS_KEY_ID=<アクセスキー> $ export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー> $ export AWS_SESSION_TOKEN=<セッショントークン> # docker-compose使用 $ docker compose run aws-nuke # 直接docker run $ docker run \ --rm -it \ -v /full-path/to/nuke-config.yml:/home/aws-nuke/config.yml \ -v /home/user/.aws:/home/aws-nuke/.aws \ quay.io/rebuy/aws-nuke:latest \ --config /home/aws-nuke/config.yml
.github/workflows/aws-nuke-run.yamlの作成
aws-nuke用のワークフローファイルです。 今回はサンプル用に毎時0分に実行します。
name: aws-nuke-run on: schedule: - cron: '0 * * * *' jobs: run_aws_nuke: name: Run aws-nuke runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - name: Checkout uses: actions/checkout@v3 - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME_TEST }} aws-region: ap-northeast-1 - name: Run aws-nuke run: docker compose run aws-nuke --no-dry-run
おわりに
GithubActions上でaws-nukeを定期実行する方法の紹介でした。
他にもpush時や手動トリガー(workflow_dispatch)でdry-runを実行させたりすると便利かもしれません。
ワークフローをトリガーするイベント - GitHub Docs
以上、AWS事業本部の佐藤(@chari7311)でした。